var Koa = require('koa');
var views = require('koa-views');
var bodyParser = require('koa-bodyparser');
const serve = require('koa-static');
const render  = require('koa-art-template');
const path = require('path');
const session = require('koa-session')
var {router} = require('./router');


var app = new Koa()

// 应用级中间件
app.use(async(ctx, next) => {
    await next()
})

// 第三方中间件
// ! 配置模板引擎77
// app.use(views('views', { extension: 'ejs' }))
// app.use(views('views', { map: { html: 'ejs' }}))


// ! art-template 
render(app, {
    root: path.join(__dirname, 'views'),  // 视图位置
    extname: '.html',  // 后缀名
    debug: process.env.NODE_ENV !== 'production'   // 开启调试模式
});


// ! post 参数解析中间件
app.use(bodyParser());

// ! 静态资源中间件
app.use(serve('static'))

// ! session 中间件 
app.keys = ['some secret hurr']; // cookie 的签名
const CONFIG = {
    key: 'koa.sess', /** 默认*/
    maxAge: 86400000,  // cookie的过期时间
    autoCommit: true, /**  */
    overwrite: true, /** */
    httpOnly: true, /** true 只有服务器端可以获取cookie */
    signed: true, /** 默认签名 */
    rolling: false, /** 在每次请求的时候强行设置 cookie ，这将重置 cookie 过期时间 */
    renew: true, /** (boolean) renew session when session is nearly expired, so we can always keep user logged in. (default is false)*/
    secure: false, /** (boolean) secure cookie*/
    sameSite: null, /** (string) session cookie sameSite options (default null, don't set it) */
};
   
  app.use(session(CONFIG, app));




// todo 启动路由
// router.allowedMethods() 在所有路由中间件之后调用，此时根据 ctx.status 设置 response 响应头
app
    .use(router.routes())
    .use(router.allowedMethods())




app.listen(3001)